home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / zugabe / va45 / visual45 / v_aext / xhdicall.41 < prev   
Text File  |  1996-10-19  |  7KB  |  264 lines

  1. ;    Librairie accès XHDI
  2. ;    Pour le Visual Asssembler 4.0
  3.  
  4. *--------------------------------------------------------------------------*
  5.  
  6. XH_LOCATE_DRIVER:
  7.     move.l #'XHDI',GWVA_APP_OBJ_SEARCH_IN_OUT
  8.     SUPEXEC GWVA_APP_OBJ_SEARCH_ONE_COOKIE
  9.  
  10.     move.l GWVA_APP_OBJ_SEARCH_IN_OUT,a0
  11.     cmp.l #0,a0
  12.     beq.s .no_xhdi
  13.     cmp.l #$27011992,([a0],-4)
  14.     beq.s .ok
  15.  
  16. .no_xhdi:    clr.l XH_DRIVER_ROUTINE
  17.     moveq #GWVA_ERROR_GENERIC,d7
  18.     rts
  19.  
  20. .ok:    move.l (a0),XH_DRIVER_ROUTINE
  21.     clr d7
  22.     rts
  23.  
  24. *--------------------------------------------------------------------------*
  25.  
  26.     ifd LIB_XHDI_INFOPARTITION
  27. XH_GET_INFO_ON_THIS_PARTITION:
  28.     ; Entrée : d0.w=partition (0=all disk,1=first ...) d1.w=major device
  29.     ; Sortie : d0.l=start sector d1.l=nb sector d2.l=type 'XXX'0 + d7=0 si OK
  30.     ; + XH_PRODUCTNAME, XH_DEVICE_FLAGS, XH_1BLOCK_SIZE initialisés correctement
  31.  
  32.     move d1,XH_DEVICE_MAJOR
  33.     clr XH_DEVICE_MINOR
  34.     clr.l XH_PRODUCTNAME
  35.     save.w d0
  36.     SUPEXEC XH_INQ_TARGET        ; pour la taille des blocks & device flags
  37.     load.w d0
  38.     tst XH_RETURN_CODE
  39.     bne .erreur_read_debut
  40.  
  41.     clr.l d1            ; numéro du secteur à lire
  42.  
  43.     save.l d0/d1
  44.     MXALLOC #RAM_ST,XH_1BLOCK_SIZE
  45.     move.l d0,XH_READWRITE_BUFFER
  46.     load.l d0/d1
  47.     tst.l XH_READWRITE_BUFFER
  48.     ble .erreur_malloc
  49.  
  50. .continue_search:
  51.     move.w #2,XH_READWRITE_RWFLAG    ; read no change test
  52.     move.l d1,XH_READWRITE_RECNO
  53.     move.w #1,XH_READWRITE_COUNT
  54.     save.l d0/d1
  55.     SUPEXEC XH_READ_WRITE
  56.     load.l d0/d1
  57.     tst XH_RETURN_CODE
  58.     bmi .erreur_lecture_mfree
  59.  
  60.     tst d0
  61.     beq .info_on_all_disk
  62.  
  63.     move.l #$1C6,d2
  64.  
  65. .scan_all_of_4:
  66.     btst #0,([XH_READWRITE_BUFFER],d2.l)
  67.     beq .derniere_pas_trouve
  68.  
  69.     cmp.b #'X',([XH_READWRITE_BUFFER],d2.l,1)    ; description courante
  70.     bne .pas_une_xgm
  71.     cmp.w #'GM',([XH_READWRITE_BUFFER],d2.l,1+1)
  72.     bne .pas_une_xgm
  73.  
  74.     add.l ([XH_READWRITE_BUFFER],d2.l,1+3-(1+3+4+4)),d1
  75.     add.l ([XH_READWRITE_BUFFER],d2.l,1+3+4-(1+3+4+4)),d1
  76.     bra .continue_search
  77.  
  78. .pas_une_xgm:
  79.     cmp #1,d0
  80.     beq.s .trouve
  81.  
  82.     subq #1,d0
  83.     add.l #1+3+4+4,d2
  84.     cmp.l #$1C6+4*(1+3+4+4),d2
  85.     bne.s .scan_all_of_4
  86.     bra .derniere_pas_trouve    ; pas d'XGM et toutes passées
  87.  
  88. .trouve:    move.l ([XH_READWRITE_BUFFER],d2.l,1+3),d0    ; start sec
  89.     add.l d1,d0
  90.     move.l ([XH_READWRITE_BUFFER],d2.l,1+3+4),d1    ; nbr sec
  91.     move.l ([XH_READWRITE_BUFFER],d2.l,1),d2    ; id
  92.     clr.b d2
  93.  
  94. .sortie_reussie:
  95.     save.l d0-d2
  96.     MFREE XH_READWRITE_BUFFER
  97.     load.l d0-d2
  98.  
  99.     clr d7
  100.     rts
  101.  
  102. .info_on_all_disk:
  103.     clr.l d0
  104.     move.l ([XH_READWRITE_BUFFER.l],$1c2),d1
  105.     clr.l d2
  106.     bra.s .sortie_reussie
  107.  
  108. .derniere_pas_trouve:
  109. .erreur_lecture_mfree:
  110.     MFREE XH_READWRITE_BUFFER
  111.  
  112. .erreur_read_debut:
  113. .erreur_malloc:
  114.     moveq #GWVA_ERROR_GENERIC,d7
  115.     rts
  116.     endc
  117.  
  118. *--------------------------------------------------------------------------*
  119.  
  120.     ifd LIB_XHDI_GETVERSION
  121. XH_GET_VERSION:            ; no parameter
  122.     move.w #0,-(sp)        ; XH_GetVersion
  123.     jsr ([XH_DRIVER_ROUTINE])
  124.     lea 2(sp),sp
  125.     move d0,XH_RETURN_CODE
  126.     rts
  127.     endc
  128.  
  129.     ifd LIB_XHDI_INQTARGET
  130. XH_INQ_TARGET:            ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR,XH_PRODUCTNAME
  131.     move.l XH_PRODUCTNAME,-(sp)    ; char *productname
  132.     pea XH_DEVICE_FLAGS        ; *device flags
  133.     pea XH_1BLOCK_SIZE        ; *block size
  134.     move XH_DEVICE_MINOR,-(sp)    ; minor
  135.     move XH_DEVICE_MAJOR,-(sp)    ; major
  136.     move.w #1,-(sp)        ; XInqTarget
  137.     jsr ([XH_DRIVER_ROUTINE])
  138.     lea 18(sp),sp
  139.     move d0,XH_RETURN_CODE
  140.     rts
  141.     endc
  142.  
  143.     ifd LIB_XHDI_STOP
  144. XH_STOP:                ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR,XH_DO_STOP,XH_DEVICE_KEY
  145.     move XH_DEVICE_KEY,-(sp)    ; key
  146.     move XH_DO_STOP,-(sp)        ; do stop
  147.     move XH_DEVICE_MINOR,-(sp)    ; minior
  148.     move XH_DEVICE_MAJOR,-(sp)    ; major
  149.     move.w #4,-(sp)        ; XHStop
  150.     jsr ([XH_DRIVER_ROUTINE])
  151.     lea 10(sp),sp
  152.     move d0,XH_RETURN_CODE
  153.     rts
  154.     endc
  155.  
  156.     ifd LIB_XHDI_EJECT
  157. XH_EJECT:                ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR,XH_DO_EJECT,XH_DEVICE_KEY
  158.     move XH_DEVICE_KEY,-(sp)    ; key
  159.     move XH_DO_EJECT,-(sp)        ; do stop
  160.     move XH_DEVICE_MINOR,-(sp)    ; minior
  161.     move XH_DEVICE_MAJOR,-(sp)    ; major
  162.     move.w #5,-(sp)        ; XHEject
  163.     jsr ([XH_DRIVER_ROUTINE])
  164.     lea 10(sp),sp
  165.     move d0,XH_RETURN_CODE
  166.     rts
  167.     endc
  168.  
  169.     ifd LIB_XHDI_READWRITE
  170. XH_READ_WRITE:            ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR,XH_READWRITE_RWFLAG,XH_READWRITE_RECNO,XH_READWRITE_COUNT,XH_READWRITE_BUFFER
  171.     move.l XH_READWRITE_BUFFER,-(sp)    ; *buff
  172.     move.w XH_READWRITE_COUNT,-(sp)    ; count
  173.     move.l XH_READWRITE_RECNO,-(sp)    ; recno
  174.     move.w XH_READWRITE_RWFLAG,-(sp)    ; rw_flag
  175.     move XH_DEVICE_MINOR,-(sp)    ; minor
  176.     move XH_DEVICE_MAJOR,-(sp)    ; major
  177.     move.w #10,-(sp)        ; XHreadWrite
  178.     jsr ([XH_DRIVER_ROUTINE])
  179.     lea 18(sp),sp
  180.     move d0,XH_RETURN_CODE
  181.     rts
  182.     endc
  183.  
  184.     ifd LIB_XHDI_INQDEV2
  185. XH_INQ_DEV_2:            ; XH_BIOS_DEVICE,XH_BPB,XH_PARTID
  186.     move.l XH_PARTID,-(sp)        ; char *partid
  187.     pea XH_DEVICE_NB_BLOCKS        ; *blocks
  188.     move.l XH_BPB,-(sp)        ; BPB *bpb
  189.     pea XH_DEVICE_START_SECTOR    ; *device start sector
  190.     pea XH_DEVICE_MINOR        ; *minor
  191.     pea XH_DEVICE_MAJOR        ; *major
  192.     move.w XH_BIOS_DEVICE,-(sp)    ; bios device
  193.     move.w #12,-(sp)        ; XInqDev2
  194.     jsr ([XH_DRIVER_ROUTINE])
  195.     lea 28(sp),sp
  196.     move.w #GWVA_ERROR_GENERIC,XH_RETURN_CODE
  197.     cmp.l #-1,XH_DEVICE_START_SECTOR
  198.     beq.s .temp_unavailable
  199.     move d0,XH_RETURN_CODE
  200. .temp_unavailable:
  201.     rts
  202.     endc
  203.  
  204.     ifd LIB_XHDI_GETCAPACITY
  205. XH_GET_CAPACITY:            ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR
  206.     pea XH_1BLOCK_SIZE        ; *blocksize
  207.     pea XH_DEVICE_NB_BLOCKS        ; *blocks
  208.     move XH_DEVICE_MINOR,-(sp)    ; minor
  209.     move XH_DEVICE_MAJOR,-(sp)    ; major
  210.     move.w #14,-(sp)        ; XHGetCapacity
  211.     jsr ([XH_DRIVER_ROUTINE])
  212.     lea 14(sp),sp
  213.     move d0,XH_RETURN_CODE
  214.     rts
  215.     endc
  216.  
  217.     ifd LIB_XHDI_LASTACCESS
  218. XH_LAST_ACCESS:            ; XH_DEVICE_MAJOR,XH_DEVICE_MINOR
  219.     pea XH_NB_MS        ; *ms
  220.     move XH_DEVICE_MINOR,-(sp)    ; minor
  221.     move XH_DEVICE_MAJOR,-(sp)    ; major
  222.     move.w #18,-(sp)        ; XHLastAccess
  223.     jsr ([XH_DRIVER_ROUTINE])
  224.     lea 10(sp),sp
  225.     move d0,XH_RETURN_CODE
  226.     rts
  227.     endc
  228.  
  229. *--------------------------------------------------------------------------*
  230.  
  231.     BSS
  232.  
  233. XH_DRIVER_ROUTINE:    ds.l 1
  234. XH_RETURN_CODE:    ds.w 1
  235.  
  236. XH_DEVICE_FLAGS:    ds.l 1
  237. XH_1BLOCK_SIZE:    ds.l 1
  238. XH_DEVICE_NB_BLOCKS:    ds.l 1
  239. XH_DEVICE_START_SECTOR:    ds.l 1
  240. XH_DEVICE_KEY:    ds.w 1
  241. XH_BIOS_DEVICE:    ds.w 1
  242. XH_DEVICE_MINOR:    ds.w 1
  243. XH_DEVICE_MAJOR:    ds.w 1
  244. XH_READWRITE_RWFLAG:    ds.w 1
  245. XH_READWRITE_RECNO:    ds.l 1
  246. XH_READWRITE_COUNT:    ds.w 1
  247. XH_READWRITE_BUFFER:    ds.l 1
  248. XH_PRODUCTNAME:    ds.l 1    ; fill with 0.l if not used
  249. XH_PARTID:        ds.l 1    ; fill with 0.l if not used
  250. XH_BPB:        ds.l 1    ; fill with 0.l if not used
  251. XH_NB_MS:        ds.l 1
  252.  
  253.     ifd LIB_XHDI_STOP
  254. XH_DO_STOP:    ds.w 1
  255.     endc
  256.  
  257.     ifd LIB_XHDI_EJECT
  258. XH_DO_EJECT:ds.w 1
  259.     endc
  260.  
  261.     TEXT
  262.  
  263. *--------------------------------------------------------------------------*
  264.